From 66cb09646d9ce8bbe6e2c91d6651e3fd77572cea Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Fri, 29 Jan 2010 06:47:24 +0000 Subject: [PATCH] x86 mca: Handle the vMCA bank correctly Currently the virtual MCE MSR assume all MSRs range from 0 to MAX_NR_BANKS are always MCE MSR, this is not always correct. With this patch, the mce_rdmsr/mce_wrmsr will only handle vMCE MSR range from 0 to the MCA banks in the host platform. Please notice that some MSR beyond current MCA banks in the host platform are really MCA MSRs, that should be handled by general MSR handler. Signed-off-by: Jiang, Yunhong --- xen/arch/x86/cpu/mcheck/mce.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/cpu/mcheck/mce.c b/xen/arch/x86/cpu/mcheck/mce.c index 8bb33aacb5..cf09a5029e 100644 --- a/xen/arch/x86/cpu/mcheck/mce.c +++ b/xen/arch/x86/cpu/mcheck/mce.c @@ -716,8 +716,8 @@ int mce_rdmsr(uint32_t msr, uint64_t *val) bank = (msr - MSR_IA32_MC0_CTL) / 4; if ( bank >= (d->arch.vmca_msrs.mcg_cap & MCG_CAP_COUNT) ) { - mce_printk(MCE_QUIET, "MCE: bank %u does not exist\n", bank); - ret = -1; + mce_printk(MCE_QUIET, "MCE: MSR %x is not MCA MSR\n", msr); + ret = 0; break; } switch (msr & (MSR_IA32_MC0_CTL | 3)) @@ -848,8 +848,8 @@ int mce_wrmsr(u32 msr, u64 val) bank = (msr - MSR_IA32_MC0_CTL) / 4; if ( bank >= (d->arch.vmca_msrs.mcg_cap & MCG_CAP_COUNT) ) { - mce_printk(MCE_QUIET, "MCE: bank %u does not exist\n", bank); - ret = -1; + mce_printk(MCE_QUIET, "MCE: MSR %x is not MCA MSR\n", msr); + ret = 0; break; } switch ( msr & (MSR_IA32_MC0_CTL | 3) ) -- 2.30.2